Использование EJB3 JPA

Начиная с версии 2.1 OpenXava поддерживает EJB3.

Конфигурирование вашего приложения OX для работы с EJB3

С версии OX v3.0 JPA - это persistence engine по-умолчанию так, что вам ничего конфигурировать не нужно.
Если же вы используете OX v2.1 или v2.2, вам необходимо отредактировать файл properties/xava.properties вашего проекта в таком ключе:
 # EJB3 Java Persistence API
 persistenceProviderClass=org.openxava.model.impl.JPAPersistenceProvider
 mapFacadeAsEJB=false
После это ваше приложение будет использовать EJB3 JPA вместо Hibernate для обеспечения постоянного хранения объектов (object persistence).

Использование EJB3 JPA в вашем коде

Вы можете использовать стандартные конструкции Java Persistence API в любой части приложения OpenXava, в том числе в калькуляторах (calculators), валидаторах (validators), действиях (actions), фильтрах (filters) и т.д.
С целью облегчить использование JPA OpenXava предоставляет класс XPersistence. К примеру, если вы хотите сохранить объект в базе данных, используя штатные возможности JPA, вам придется написать что-то вроде:
 EntityManagerFactory f = Persistence.createEntityManagerFactory("default");
 EntityManager manager = f.createEntityManager();
 manager.getTransaction().begin();
 Customer customer = ... ;
 manager.persist(customer);
 manager.getTransaction().commit();
 manager.close();
 
Внутри OpenXava, благодаря XPersistence, вы можете облегчить себе жизнь:
 Customer customer = ... ;
 XPersistence.getManager().persist(customer);
 
И все!
В момент, когда вы первый раз обращаетесь к XPersistence.getManager(), экземпляр manager'а создается для текущего потока, кроме того, создается транзакция JPA. При следующем обращении возвращается тот же экземпляр manager'а. В конце цикла выполнения действия (action) OpenXava автоматически выполняет commit для транзакции и закрывает manager.
Вы можете также выполнять commit тразакции в любой момент вызовом XPersistence.commit(). После этого вам необходимо выполнить XPersistence.getManager() для получения ногов экземпляра manager и инциации новой транзакции.
Дополнительная информация доступа в API документации к классу org.openxava.jpa.XPersistence.